লারাভেল (Laravel) একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের দ্রুত এবং কার্যকরীভাবে API তৈরি করতে সহায়তা করে। লারাভেল এপিআই রিসোর্স (Laravel API Resource) একটি গুরুত্বপূর্ণ ফিচার, যা আপনাকে API রেসপন্সের ডেটা ফরম্যাট করতে এবং সহজভাবে JSON রেসপন্স তৈরি করতে সাহায্য করে।
এপিআই রিসোর্স (API Resource) হল একটি ক্লাস যা লারাভেলে API রেসপন্স তৈরির প্রক্রিয়াটি সহজ করে। এটি মূলত ডাটাবেস মডেল বা কালেকশনের (Collection) ডেটাকে JSON ফরম্যাটে কাস্টমাইজড আউটপুটে রূপান্তরিত করে, যাতে আপনার API আরও পরিষ্কার এবং ব্যবহারকারী-বান্ধব হয়।
API রিসোর্স ব্যবহার করে আপনি API রেসপন্সের কাস্টম ডেটা ফরম্যাট তৈরি করতে পারেন, যেমন ডেটা ম্যানিপুলেশন, সম্পর্কিত মডেলগুলির অন্তর্ভুক্তি, বা অতিরিক্ত তথ্য যোগ করা।
লারাভেলে API রিসোর্স তৈরি করতে php artisan make:resource
কমান্ড ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি UserResource
নামক রিসোর্স তৈরি করতে চান, তাহলে কমান্ড হবে:
php artisan make:resource UserResource
এই কমান্ডটি app/Http/Resources
ডিরেক্টরিতে UserResource
ক্লাস তৈরি করবে।
UserResource
ক্লাসটি ডিফল্টভাবে এর মতো কিছু কোড থাকবে:
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
];
}
}
এখানে, toArray()
মেথডটি রিটার্ন করবে সেই ডেটার একটি অ্যারে যা আপনি API রেসপন্সে দেখাতে চান। $this->
এর মাধ্যমে মডেলের প্রপার্টি অ্যাক্সেস করা হয়।
এখন, যখন আপনি UserResource
রিসোর্স ব্যবহার করতে চান, তখন এটি সাধারণত রিসোর্সের মাধ্যমে মডেল বা কালেকশন রিটার্ন করতে হয়। উদাহরণস্বরূপ, যদি আপনি একটি User
মডেল রিটার্ন করতে চান:
use App\Http\Resources\UserResource;
public function show($id)
{
$user = User::findOrFail($id);
return new UserResource($user);
}
এখানে, new UserResource($user)
ব্যবহার করে একটি একক User
মডেল JSON রেসপন্সে রূপান্তরিত হচ্ছে।
যদি আপনি একাধিক User
মডেল রিটার্ন করতে চান, তাহলে কালেকশন রিসোর্স ব্যবহার করতে হবে। UserResource
রিসোর্স ক্লাসটি কেবল একক রেকর্ডের জন্য কাজ করবে, কিন্তু কালেকশন রিসোর্স Collection
ক্লাসে ব্যবহার করা যেতে পারে।
এখন, একটি কালেকশন রিসোর্স তৈরি করতে হবে। উদাহরণস্বরূপ:
use App\Http\Resources\UserResource;
public function index()
{
$users = User::all();
return UserResource::collection($users);
}
এখানে, UserResource::collection($users)
ব্যবহার করে একাধিক User
মডেল JSON রেসপন্সে রূপান্তরিত হচ্ছে।
লারাভেলে API রিসোর্সের মাধ্যমে আপনি সম্পর্কিত মডেল (Relationship Models) যুক্ত করতে পারেন। উদাহরণস্বরূপ, ধরুন একটি User
মডেলের সাথে Post
মডেল সম্পর্কিত, এবং আপনি ব্যবহারকারীর সাথে পোস্টও অন্তর্ভুক্ত করতে চান। তখন এটি নিম্নরূপ করা যেতে পারে:
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'posts' => PostResource::collection($this->whenLoaded('posts')),
];
}
এখানে, whenLoaded('posts')
মেথডটি নিশ্চিত করবে যে posts
সম্পর্কটি তখনই অন্তর্ভুক্ত হবে যখন তা লোড করা হবে। PostResource::collection()
ব্যবহার করে সম্পর্কিত পোস্টগুলির জন্য রিসোর্স রিটার্ন করা হয়।
আপনি চাইলে রিসোর্সের ডেটাকে আরো কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, আপনি রেসপন্সের মধ্যে কিছু কন্ডিশনাল ডেটা যুক্ত করতে পারেন। যেমন:
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'profile_url' => $this->when($this->profile, url('/profile/'.$this->profile)),
];
}
এখানে, when()
মেথডটি ডেটা কন্ডিশনালি যোগ করার জন্য ব্যবহার করা হয়। যদি $this->profile
থাকে, তবে profile_url
যুক্ত হবে।
লারাভেল API রিসোর্সের মাধ্যমে আপনি রেসপন্সের ফরম্যাটও কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, আপনি যদি API রেসপন্সের মধ্যে মেটাডেটা যোগ করতে চান:
public function with($request)
{
return [
'meta' => [
'version' => '1.0.0',
'author' => 'John Doe',
],
];
}
এটি আপনার রেসপন্সে অতিরিক্ত মেটাডেটা যোগ করবে যা সাধারণত API সংস্করণ বা ডেভেলপার তথ্য হতে পারে।
লারাভেল API রিসোর্সের মাধ্যমে আপনি API রেসপন্সগুলো আরও কাস্টমাইজ এবং সংগঠিত করতে পারেন, যা API ব্যবহারকারীদের জন্য আরো পরিষ্কার এবং কার্যকরী করে তোলে। এটি বিশেষ করে বড় অ্যাপ্লিকেশনগুলোতে, যেখানে ডেটা বিভিন্ন সম্পর্কযুক্ত মডেল ও রেসপন্স ফরম্যাটে থাকতে পারে, খুবই কার্যকরী।